<!DOCTYPE html>
<html lang="zh-CN">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // < !--函数 -->


        //封装函数
        niubi()// 可以在定义前就调用   
        function niubi() {// 封装函数/定义函数  function            
            alert('哈哈哈哈')// 被封装的代码
        }
        niubi()// 调用运行函数


        // 断点调试
        1.打开控制台, 选择sources
        2.选中要测试的文件
        3.选中开始运行的一行代码, 单击行号, 打断点
        4.刷新浏览器
        5.选中右边的箭头


        // 参数     
        // 形参 实参
        function num(qwe, ewq) { // (qwe, ewq)是赋予括号里未知数的灵活性,可以被调用时进行指定
            document.write(qwe + ewq)
        }
        num(6, 7)
        // 形参
        // (qwe, ewq)是形参  不是真实的数据,等待调用时接收指定的数据
        // 实参
        // num(6,7)是实参   是真实的数据,可以赋值给形参里的未知数任何数字



        // 函数案例
        简单 例:
        let name = prompt('请输入你的名字')
        let money = prompt('请输入你的余额')
        function jieshao(a, b) {
            document.write(`我叫${a},我银行卡里有${b}万元`)
        }
        jieshao(name, money)
        计算 例:
        let yue = prompt('请输入银行卡余额')
        let xiaofei = prompt('请输入本次消费金额')
        let you = prompt('请输入路程往返油费')
        function money(z, x, c) {
            return z - x - c
        }
        let qian = money(yue, xiaofei, you)
        document.write(`经过本次消费,您的卡内余额还有${qian}元,欢迎下次消费`)
        多个计算 例:
        let miao = prompt('输入秒数')
        function time(x) {
            let h = parseInt(x / 60 / 60)
            let m = parseInt(x / 60 % 60)
            let s = parseInt(x % 60)
            document.write(`${x}秒转化为${h}小时${m}分钟${s}秒`)
        }
        time(miao)


        // 函数返回值
        return 属性名
        //将函数中return的内容返到调用函数的地方, 之后查询调用函数的时候可以查出内容或直接调用
        例:
        function a() {
            let cc = 1 + 1
            console.log(cc)
            return cc
        }
        console.log(a())
        console.log(a() - 2)







        // 对象
        // 空对象:
        let obj1 = {}
        // 也是空对象
        // 当未来有变量需要存储的数据是对象型,但是现在还没有任何数据的时候,提前预留空对象
        let obj1 = null


        // 有数据对象
        内容写键值对, 加: 和, 可以写多个属性名
        let aaa = {
            name: 'zjy',
            age: '21',
            xingbie: '男'
        }
        console.log(aaa)
        console.log(typeof aaa)


        // 属性的访问
        //第一种    对象名.属性名
        console.log(aaa.name);
        //第二种    对象名['属性名'] 或者 对象名[新的变量名](新的变量名和对象的内容相同不需要加引号,直接加新的变量名)
        console.log(aaa['name']);
        let bbb = 'name'
        console.log(aaa[bbb]);


        // 属性的更改
        // 修改变量
        // 第一种 对象名.变量名=值
        aaa.name = 'jia'
        console.log(aaa.name);
        // 第二种 对象名['变量名']
        aaa['age'] = 18
        console.log(aaa['age']);
        // 第三种 选一个没有的变量名,会生成一个新的键值对
        aaa.xingbie = 'man'
        console.log(aaa.xingbie);





        // 方法
        // 写在对象里的函数叫做方法
        例:
        let asd = {
            // 以下就是方法
            say: function () {
                console.log('我会说话');
            }
        }
        // 调用时   对象名.方法名()
        asd.say
        // 添加新的方法   对象名.方法名 = function() {}
        asd.eat = function () {
            console.log('我会吃');
        }



    </script>

</body>

</html>